
var LayDataTable = (function() {
	var table;
	var l_options;
	var l_searchConfig;
	var currentTable;
	var $;
	var whereData={};//搜索条件
	var form;

	function init(_options, headEvenFun = null, rowEvenFun = null, searchConfig = {}) {
		var _this = this;

		//设置默认项
		_options.elem = _options.elem || "";
		_options.height = _options.height || 700;

		//默认分页配置
		if (typeof(_options.page) != "boolean") {
			_options.page = _options.page ||{};
			_options.page = Object.assign({
				first: '首页',
				prev: '上一页',
				next: '下一页',
				last: '尾页',
				groups: '6',
				layout: ['count', 'first', 'prev', 'page', 'next', 'limit', 'refresh', 'skip'],
				theme: '#fe0627'
			},_options.page);
		}

		var options = Object.assign({
			title: '',
			defaultToolbar: ['filter', 'print'],
			limits: [10, 50, 100],
			limit: 10, //每页默认显示的数量
			skin: 'row', //表格风格
			even: typeof(_options.even)=='boolean'?_options.even:true, //开启隔行背景
			size: 'lg', //小尺寸的表格
			text:{
				none: '暂无相关数据' //默认：无数据。注：该属性为 layui 2.2.5 开始新增
			},
			parseData:function(res) { //res 即为原始返回的数据
				return {
					//这部分最后使用全局配置 根据实际业务修改
					"code": res.status, //解析接口状态
					"msg": res.message, //解析提示文本
					"count": res.total, //解析数据长度
					"data": res.data.item //解析数据列表
				};
			},
			request:{	//默认请求参数 根据实际业务修改
				pageName: 'start', //页码的参数名称，默认：page
				limitName: 'length' //每页数据量的参数名，默认：limit
			}
		},_options);

		
		var elemDom = document.getElementById(options.elem.substr(1));
		var tableFilter = elemDom.getAttribute("lay-filter");

		l_options = options;
		//搜索条件
		if (searchConfig) {
			l_searchConfig =searchConfig;
		}


		layui.use(['table', 'jquery','form'], function() {
			table = layui.table;
			$ =layui.$;
			setParams();
			l_options.where = whereData;
			//第一个实例
			currentTable = table.render(options);
			form= layui.form;

			//头工具栏事件
			if (typeof(headEvenFun) == "function") {
				table.on('toolbar(' + tableFilter + ')', function(obj) {
					headEvenFun(table.checkStatus(obj.config.id), obj.event);
				});
			}

			//监听行工具事件
			if (typeof(rowEvenFun) == "function") {
				table.on('tool(' + tableFilter + ')', function(obj) {
					rowEvenFun(obj);
				});
			}
			
			//监听排序事件 
			table.on('sort('+l_options.elem.replace("#","")+')', function(obj){ //注：sort 是工具条事件名，test 是 table 原始容器的属性 lay-filter="对应的值"			
			  
			  table.reload(l_options.elem.replace("#",""), {
			    initSort: obj //记录初始排序，如果不设的话，将无法标记表头的排序状态。
			    ,where: { //请求参数                  （注意：这里面的参数可任意定义，并非下面固定的格式）---》根据实际业务修改
			       field: obj.field //排序字段
			      ,order: obj.type //排序方式
			    }
			  });
			  
			});

		});

	}

	function search() { //搜索的方法		
		setParams();
		l_options.where = whereData;
		currentTable.reload(l_options);
	}

	function getTable() { //获取table
		return table;
	}
	
	function setParams(){// 设置参数
		var type;
		var searchId = typeof(l_searchConfig)==='object'?l_searchConfig.searchId:l_searchConfig;
		
		$("#"+searchId+" input,#"+searchId+" select").each(function(ind, item) {
			type = $(item).attr("type");
			if ($(item).attr("name")) {
				if (type == 'radio' || type == 'checkbox') {
					whereData[$(item).attr("name")] = $("input[name='" + $(item).attr("name") + "']:checked").val() || '';
				} else {
					whereData[$(item).attr("name")] = $(item).val() || '';
				}
			}
		})
	}

	function reset(whereParams) { //重置搜索
		var type;
		whereData = {};
		l_options.where={};
		var searchId = typeof(l_searchConfig)==='object'?l_searchConfig.searchId:l_searchConfig;
		
		$("#"+searchId+" input,#"+searchId+" select").each(function(ind, item) {
			type = $(item).attr("type");
			if ($(item).attr("name")) {
				if (type == 'hidden') {
					whereData[$(item).attr("name")] = $(item).val() || '';
				} else if (type == 'radio' || type == 'checkbox') {
					$(item).attr("checked", false);
					whereData[$(item).attr("name")] = '';
				} else {
					whereData[$(item).attr("name")] = '';
					$(item).val("");					
				}
			}
		
		});
		Object.assign(whereData,whereParams||{}) ;
		//局部刷新 搜索区  最顶部div 的 class="layui-form" 
		//需要搭配 lay-filter,并且lay-filter的值
		//一定要与 seachConfig里面searchId的值一样
		form.render('select',searchId);
		form.render('radio',searchId);
		form.render('checkbox',searchId);
	
		
		currentTable.reload({
		    where: whereData,
		    page:{
		         curr: 1//重新从第 1 页开始
		    }
		});
	}


	//对象方法  [我的理解]
	return function() {
		this.init = init;
		this.search = search; //搜索
		this.reset = reset; //重置搜索
		this.getTable = getTable;
	}
})();






//属性使您有能力向对象添加属性和方法
LayDataTable.prototype = {
	//options: {},
	//searchConfig: {},
}
